/**
 * 文件上传方法
 * @param {Object} options 配置选项
 * @param {string} options.url 上传地址
 * @param {string} options.fileType 文件类型 image/video/all
 * @param {number} options.maxSize 最大文件大小(MB)
 * @param {function} options.onProgress 上传进度回调
 * @param {function} options.onSuccess 上传成功回调
 * @param {function} options.onError 上传失败回调
 */
export default ({
    url = '', 
    fileType = 'all',
    maxSize = 10,
    onProgress,
    onSuccess,
    onError,
    extension,
}) => {
    // 选择文件
    uni.chooseFile({
        count: 1,
        type: fileType,
        extension: extension || ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'jpg', 'jpeg', 'png', 'gif'],
        success: (res) => {
            const tempFilePath = res.tempFilePaths[0];
            const tempFile = res.tempFiles[0];
            
            // 检查文件大小
            if(tempFile.size > maxSize * 1024 * 1024) {
                uni.showToast({
                    title: `文件大小不能超过${maxSize}MB`,
                    icon: 'none'
                });
                onError && onError({
                    errMsg: `文件大小超过${maxSize}MB限制`
                });
                return;
            }

            // 开始上传
            const uploadTask = uni.uploadFile({
                url: url,
                filePath: tempFilePath,
                name: 'file',
                header: {
                    'Authorization': uni.getStorageSync('token') || '' // 如果需要token
                },
                formData: {
                    // 可以传递其他参数
                    'user': 'test'
                },
                success: (uploadRes) => {
                    try {
                        const data = JSON.parse(uploadRes.data);
                        onSuccess && onSuccess(data);
                    } catch(e) {
                        onError && onError({
                            errMsg: '上传失败，返回数据格式错误'
                        });
                    }
                },
                fail: (err) => {
                    onError && onError(err);
                    uni.showToast({
                        title: '上传失败',
                        icon: 'none'
                    });
                }
            });

            // 监听上传进度
            uploadTask.onProgressUpdate((res) => {
                onProgress && onProgress(res.progress);
            });
        },
        fail: (err) => {
            onError && onError(err);
        }
    });
};


/**
 * 文件上传方法
 * @param {Object} options 配置选项
 * @param {string} options.url 上传地址
 * @param {string} options.fileType 文件类型 image/video/all
 * @param {number} options.maxSize 最大文件大小(MB)
 * @param {function} options.onProgress 上传进度回调
 * @param {function} options.onSuccess 上传成功回调
 * @param {function} options.onError 上传失败回调
 */

export const upload = ({
    url = '', 
    maxSize = 10,
    onProgress,
    onSuccess,
    onError,
    tempFilePath
}) => {
    return new Promise((resolve, reject) => {
        uni.uploadFile({
            url: url,
            filePath: tempFilePath,
            name: 'file',
            header: {
                'Authorization': uni.getStorageSync('token') || '' // 如果需要token
            },
            formData: {
                // 可以传递其他参数
                'user': 'test'
            },
            success: (uploadRes) => {
                try {
                    const data = JSON.parse(uploadRes.data);
                    resolve(data)
                } catch(e) {
                    reject(e)
                }
            },
            fail: (err) => {
                reject(err)
                uni.showToast({
                    title: '上传失败',
                    icon: 'none'
                });
            }
        });
    })
}

// 使用示例：
/*
uploadFile({
    url: 'https://your-upload-url.com/upload',
    fileType: 'all',
    maxSize: 10, // 10MB
    onProgress: (progress) => {
        console.log('上传进度：', progress);
    },
    onSuccess: (res) => {
        console.log('上传成功：', res);
        uni.showToast({
            title: '上传成功',
            icon: 'success'
        });
    },
    onError: (err) => {
        console.error('上传失败：', err);
        uni.showToast({
            title: '上传失败',
            icon: 'none'
        });
    }
});
*/
